﻿@* Supprimer cette section si le regroupement est utilisé *@
@section Scripts {
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
}

@{
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "Connexion";

    // Initialiser les variables de la page générale
    var login = "";
    var password = "";
    var rememberMe = false;

    var returnUrl = Request.QueryString["ReturnUrl"];
    if (returnUrl.IsEmpty()) {
        // Certains fournisseurs de connexions externes demandent toujours une URL de retour
        returnUrl = Href("~/");
    }

    // Validation de la configuration
    Validation.RequireField("login", "Please, specify a username.");
    Validation.RequireField("password", "Please specify a password.");
    Validation.Add("password",
        Validator.StringLength(
            maxLength: Int32.MaxValue,
            minLength: 6,
            errorMessage: "The password needs at least 6 characters."));

    // S'il s'agit d'une demande POST, valider et traiter les données
    if (IsPost) {
        AntiForgery.Validate();
        // S'agit-il d'une demande de connexion externe ?
        string provider = Request.Form["provider"];
        if (!provider.IsEmpty()) {
            OAuthWebSecurity.RequestAuthentication(provider, Href("~/Account/RegisterService", new { returnUrl }));
            return;
        } else if (Validation.IsValid()) {
            login = Request.Form["login"];
            password = Request.Form["password"];
            rememberMe = Request.Form["rememberMe"].AsBool();

            if (WebSecurity.UserExists(login) && WebSecurity.GetPasswordFailuresSinceLastSuccess(login) > 4 && WebSecurity.GetLastPasswordFailureDate(login).AddSeconds(60) > DateTime.UtcNow)
            {
                Response.Redirect("~/Account/AccountLockedOut");
                return;
            }

            // Essayez de vous connecter avec les informations d'identification fournies
            if (WebSecurity.Login(login, password, rememberMe))
            {
                Context.RedirectLocal(returnUrl);
                return;
            } else {
                ModelState.AddFormError("Wrong username or password.");
            }
        }
    }
}

<hgroup class="title">
    <h1>@Page.Title.</h1>
</hgroup>

<section id="loginForm">
    <h2>Utilisez un compte local pour vous connecter.</h2>
    <form method="post">
        @AntiForgery.GetHtml()
        @* Si une ou plusieurs erreurs de validation sont détectées, afficher un message d'erreur *@
        @Html.ValidationSummary("Échec de la connexion. Corrigez les erreurs et réessayez.", excludeFieldErrors: true, htmlAttributes: null)

        <fieldset>
            <legend>Connectez-vous à votre compte</legend>
            <ol>
                <li class="email">
                    <label for="login" @if (!ModelState.IsValidField("email"))
                                       {<text>class="error-label"</text>}>Username</label>
                    <input type="text" id="login" name="login" value="@login" @Validation.For("login")/>
                    @* Rédiger toute erreur de validation de nom d'utilisateur sur la page *@
                    @Html.ValidationMessage("login")
                </li>
                <li class="password">
                    <label for="password" @if (!ModelState.IsValidField("password")) {<text>class="error-label"</text>}>Password</label>
                    <input type="password" id="password" name="password" @Validation.For("password")/>
                    @* Rédiger toute erreur de validation de mot de passe sur la page *@
                    @Html.ValidationMessage("password")
                </li>
                <li class="remember-me">
                    <input type="checkbox" id="rememberMe" name="rememberMe" value="true" checked="@rememberMe" />
                    <label class="checkbox" for="rememberMe">Remember password ?</label>
                </li>
            </ol>
            <input type="submit" value="Se connecter" />
        </fieldset>
    </form>
    <p>
        <a href="~/Account/Register">No account yet ?</a>
        <a href="~/Account/ForgotPassword">Forgot your password ?</a>
    </p>
</section>

<section class="social" id="socialLoginForm">
    <h2>Use something else to connect.</h2>
    @RenderPage("~/Account/_ExternalLoginsList.cshtml")
</section>
